"""
    一些生成器方法：目前支持生成随机手机号码、随机姓名、随机地址、随机email等
    需要安装 pip3 install Fake=1.0.2
"""
import random
from faker import Factory

class Faker:

    def __init__(self):
        self.fake = Factory().create('zh_CN')

    def random_phone_number(self):
        """随机手机号"""
        return self.fake.phone_number()

    def random_data(self):
        """随机日期"""
        return self.random_data()


    def random_name(self):
        """随机姓名"""
        return self.fake.name()


    def random_address(self):
        """随机地址"""
        return self.fake.address()


    def random_email(self):
        """随机email"""
        return self.fake.email()


    def random_ipv4(self):
        """随机IPV4地址"""
        return self.fake.ipv4()


    def random_str(self,min_chars=0, max_chars=8):
        """长度在最大值与最小值之间的随机字符串"""
        return self.fake.pystr(min_chars=min_chars, max_chars=max_chars)


    def factory_generate_ids(self,starting_id=1, increment=1):
        """ 返回一个生成器函数，调用这个函数产生生成器，从starting_id开始，步长为increment。 """
        def generate_started_ids():
            val = starting_id
            local_increment = increment
            while True:
                yield val
                val += local_increment
        return generate_started_ids


    def factory_choice_generator(self,values):
        """ 返回一个生成器函数，调用这个函数产生生成器，从给定的list中随机取一项。 """
        def choice_generator():
            my_list = list(values)
            rand = random.Random()
            while True:
                yield random.choice(my_list)
        return choice_generator


if __name__ == '__main__':
    start = Faker()
    print(start.random_phone_number())
    print(start.random_name())
    print(start.random_address())
    print(start.random_email())
    print(start.random_ipv4())
    print(start.random_str(min_chars=6, max_chars=8))
    id_gen = start.factory_generate_ids(starting_id=0, increment=2)()
    for i in range(5):
        print(next(id_gen))

    choices = ['John', 'Sam', 'Lily', 'Rose']
    choice_gen = start.factory_choice_generator(choices)()
    for i in range(5):
        print(next(choice_gen))
